"""SQL参数处理工具类"""
import argparse
from pathlib import Path
from typing import Callable
from src.base.registry import bera
from src.base.project_config import ProjectConfig

class SQLArgsUtils:
    """SQL参数处理工具类"""

    # 默认文件名
    DEFAULT_TABLE = "t_miaoma_student"

    @classmethod
    def add_arguments(cls, parser: argparse.ArgumentParser) -> None:
        """添加通用的输入参数"""
        # 项目目录参数
        parser.add_argument('--project-dir',
                           help='项目根目录，默认使用 assets/projects/default',
                           type=str)

        # 输入模式，三选一
        group = parser.add_mutually_exclusive_group(required=False)
        group.add_argument('-n', '--filename', help='不带后缀的文件名')
        group.add_argument('-d', '--directory', help='文件所在目录')
        group.add_argument('-f', '--filepath', help='指定文件的完整路径')

        # 其他参数
        parser.add_argument('-v', '--verbose', action='store_true', help='显示详细日志')

    @classmethod
    def get_input_mode(cls, args: argparse.Namespace) -> str:
        """获取输入模式

        Args:
            args: 解析后的参数

        Returns:
            str: 'directory', 'filepath' 或 'filename'
        """
        # 验证输入参数
        cls.validate_input_args(args)

        # 获取输入模式
        if args.directory:
            return 'directory'
        elif args.filepath:
            return 'filepath'
        else:
            return 'filename'

    @classmethod
    def validate_input_args(cls, args: argparse.Namespace) -> None:
        """验证输入参数的有效性"""
        # 检查是否提供了输入参数
        if not any([args.filename, args.filepath, args.directory]):
            # 使用配置中的默认值
            args.filename = cls.DEFAULT_TABLE
            return

        # 检查参数是否冲突
        modes = [args.filename, args.filepath, args.directory]
        if len([m for m in modes if m]) > 1:
            raise ValueError("只能指定一种输入模式：--filename, --filepath 或 --directory")